第 19 天,來處理音頻、影片和其他多媒體消息,讓你的 Line Bot 能夠對多種內容做出響應,進一步提高互動性。
與處理圖片類似,音頻消息可以通過 AudioMessage
事件來接收,並通過 message_id
下載音頻文件。
設置音頻消息的處理器:
AudioMessage
事件來捕捉音頻數據,並將其保存或進行處理。例子:
@handler.add(MessageEvent, message=AudioMessage)
def handle_audio_message(event):
message_id = event.message.id
audio_content = line_bot_api.get_message_content(message_id)
# 保存音頻文件
with open(f"{message_id}.mp3", "wb") as f:
for chunk in audio_content.iter_content():
f.write(chunk)
reply_message = "音頻已收到並保存!"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
處理音頻:
處理完音頻文件後,你可以使用語音識別技術將其轉換為文本。這樣可以讓 Bot 根據用戶語音內容做出響應。你可以使用 Google Cloud Speech-to-Text API、Azure Speech Service 等。
整合語音識別 API:
例子:
from google.cloud import speech
def transcribe_audio(audio_path):
client = speech.SpeechClient()
with open(audio_path, "rb") as audio_file:
content = audio_file.read()
audio = speech.RecognitionAudio(content=content)
config = speech.RecognitionConfig(
encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
sample_rate_hertz=16000,
language_code="zh-TW",
)
response = client.recognize(config=config, audio=audio)
for result in response.results:
return result.alternatives[0].transcript
@handler.add(MessageEvent, message=AudioMessage)
def handle_audio_message(event):
message_id = event.message.id
audio_content = line_bot_api.get_message_content(message_id)
# 保存音頻
audio_path = f"{message_id}.wav"
with open(audio_path, "wb") as f:
for chunk in audio_content.iter_content():
f.write(chunk)
# 語音轉文字
result = transcribe_audio(audio_path)
reply_message = f"音頻內容為: {result}"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
影片消息的處理方式與圖片、音頻類似。當用戶發送影片時,可以通過 VideoMessage
事件來處理,並下載影片文件。
接收影片消息:
例子:
@handler.add(MessageEvent, message=VideoMessage)
def handle_video_message(event):
message_id = event.message.id
video_content = line_bot_api.get_message_content(message_id)
# 保存影片文件
with open(f"{message_id}.mp4", "wb") as f:
for chunk in video_content.iter_content():
f.write(chunk)
reply_message = "影片已收到並保存!"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))
影片分析:
Line Bot 也可以接收用戶發送的文件,如 PDF、文檔等。這類消息的處理方式與圖片、音頻、影片類似,只需使用 FileMessage
事件。
接收檔案消息:
FileMessage
事件接收用戶發送的檔案。例子:
@handler.add(MessageEvent, message=FileMessage)
def handle_file_message(event):
message_id = event.message.id
file_name = event.message.file_name
file_content = line_bot_api.get_message_content(message_id)
# 保存文件
with open(f"{file_name}", "wb") as f:
for chunk in file_content.iter_content():
f.write(chunk)
reply_message = f"文件 {file_name} 已收到並保存!"
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=reply_message))